<?php
namespace app\index\controller;

use app\index\model\Action;
use app\index\model\User;
use think\Loader;

/**
 * 模型
 */
class Hb
{

    /**
     * 获取器
     */

    // 获取器
    public function index()
    {
        $user = User::get(1);
//        echo $user->status;     // 输出“正常”
//        echo $user->status_text;

        dump($user->getData());

        // 获取全部获取器数据
//        dump($user->toArray());
    }

    // 获取原始数据
    public function a()
    {
        $user = User::get(1);
        // 通过获取器获取字段
        echo $user->status;
        // 获取原始字段数据
        echo $user->getData('status');
        // 获取全部原始数据
        print_r($user->getData());
    }


    /**
     * 修改器
     */

    // 赋值的方式可以触发修改器
    public function b()
    {
        $user = new User();
        $user->username = 'THINKPHP';
        $user->email = 'xiaomi@126.com';
        $user->save();
//        echo $user->username;
//        dump($user->getData());
    }

    // 还可以用下面的方法批量触发修改器
    public function c()
    {
        $user = new User();
        $data['username'] = 'THINKPHP';
        $data['email'] = 'thinkphp@qq.com';
        $user->data($data, true);   // 触发修改器
        $user->save();

        // 直接使用save方法触发
        $user->save($data);
        print_r($user->getData());
    }


    /**
     * 只读字段
     */

    // 只读字段
    public function d()
    {
        $user = User::get(5);
        $user->username = '呵呵';
        $user->password = '3333333';
        $user->email = 'fd2014lyz@126.com';
        $user->save();
//        print_r($user->getData());
    }


    /**
     * 软删除
     */

    // 软删除
    public function e()
    {
        // 软删除
        User::destroy(25);
        // 真实删除
        User::destroy(24, true);

        $user = User::get(22);
        // 软删除
        $user->delete();
        // 真实删除
        $user->delete(true);
    }


    /**
     * 类型转化
     */

    public function f()
    {

    }


    /**
     * 数据完成
     */

    public function h()
    {

    }


    /**
     * 查询范围
     */

    // 条件查询
    public function j()
    {
        // 查找 name 为 add_config 的行为
        $info = Action::scope('thinkphp')->get();

        // 查找 type > 0 的行为
        $list = Action::scope('type')->all();

        //  查找 name 为 add_config 并且 type > 0 的行为
        $list = Action::scope('thinkphp,type')->all();

//        print_r($list);
    }

    // 直接使用闭包函数进行查询
    public function k()
    {
        $list = Action::scope(function($query){
            $query->where('type', 1)->limit(10);
        })->all();

//        print_r($list);
    }

    // 支持动态调用的方式
    public function l()
    {
        $action = new Action();
        // 查找 name 为 add_config 的行为
        $info = $action->thinkphp()->get();

        // 查找 type > 0 的行为
        $list = $action->type()->all();

        // 查找 name 为 add_config 并且 type > 0 的行为
        $list = $action->thinkphp()->type()->all();

//        print_r($list);
    }

    // 全局查询范围
    public function m()
    {
        $action = Action::get(1);
        echo $action->getLastSql();

        // 关闭全局查询范围
        $action = Action::useGlobalScope(false)->get(1);
        echo $action->getLastSql();

        // 开启全局查询范围
        $action = Action::useGlobalScope(true)->get(1);
        echo $action->getLastSql();
    }


    /**
     * 模型分层
     */

    // 实例化方法
    public function n()
    {
        // 数据层 （model）
        $user = Loader::model('User');

        // 逻辑层 （logic）
        $user = Loader::model('User', 'logic');

        // 服务层 （service）
        $user = Loader::model('User', 'service');
    }


    /**
     * 数组访问和转换
     */

    // 数组访问
    public function o()
    {
        $user = User::get(1);
        echo $user['username'];
    }

    // 转换为数组
    public function p()
    {
        $user = User::find(1);
        print_r($user->toArray());

        // 支持设置不输出的字段属性
        print_r($user->hidden(['create_time', 'update_time', 'delete_time'])->toArray());

        // 数组输出的字段值会经过获取器的处理，也可以支持追加其它获取器定义（不在数据表字段列表中）的字段
        print_r($user->append(['status_text'])->toArray());

        // 支持设置允许输出的属性
        print_r($user->visible(['id', 'username', 'email'])->toArray());
    }

    // 数据集转换
    public function q()
    {
        $list = User::all();
        if($list) $list = collection($list)->toArray();
        print_r($list);
    }

    public function r()
    {

    }

    public function s()
    {

    }


    /**
     * JSON序列化
     */

    public function t()
    {
        $user = User::get(1);
        echo $user->toJson();
    }

    public function u()
    {

    }

    public function v()
    {

    }


    /**
     * 事件
     */

    public function w()
    {

    }


}